#include <algorithm>
#include <cstdio>
#include <cstring>

const int N = 50005;
int n, k, f[N];
struct Node {
  int id, v;
  double x;
  inline bool operator<(const Node &rhs) const { return x < rhs.x; }
} a[N], b[N];

inline bool check(double mid) {
  memcpy(b, a, sizeof(b));
  memset(f, 0, sizeof(f));
  for (int i = 1; i <= n; ++i) {
    b[i].x += mid * b[i].v;
  }
  std::sort(b + 1, b + n + 1);
  int ans = 1;
  f[1] = b[1].id;
  for (int i = 2; i <= n; ++i) {
    if (f[ans] < b[i].id)
      f[++ans] = b[i].id;
    else {
      f[std::upper_bound(f + 1, f + ans + 1, b[i].id) - f] = b[i].id;
    }
  }
  return k >= n - ans;
}

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("testdata.in", "r", stdin);
  freopen("testdata.out", "w", stdout);
#endif
#ifndef LOCAL
  freopen("h.in", "r", stdin);
  freopen("h.out", "w", stdout);
#endif
#endif

  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; ++i) {
    scanf("%lf%d", &a[i].x, &a[i].v);
  }
  std::sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; ++i) a[i].id = i;
  double l = 0, r = 2e7, mid;
  while (r - l > 1e-6) {
    mid = (l + r) / 2;
    if (check(mid)) {
      l = mid;
    } else {
      r = mid;
    }
  }
  if (abs(l - 2e7) < 1e-6)
    printf("Forever");
  else
    printf("%.4lf", l);
  return 0;
}